/**************************************************************************************************
* Title: SumBoundingSphere.cpp
* Author: Gael Huber
* Description: A bounding sphere
**************************************************************************************************/
#include "SumBoundingSphere.h"

/**************************************************************************************************
* Default constructor
**************************************************************************************************/
BoundingSphere::BoundingSphere(void)
{ }

/**************************************************************************************************
* Constructor given basic requirements
**************************************************************************************************/
BoundingSphere::BoundingSphere(const Vector3_16f& p, float r)
	: _position(p), _radius(r)
{ }
	
/**************************************************************************************************
* Copy constructor
**************************************************************************************************/
BoundingSphere::BoundingSphere(const BoundingSphere& rhs)
	: _position(rhs.position()), _radius(rhs.radius())
{ }

/**************************************************************************************************
* Destructor
**************************************************************************************************/
BoundingSphere::~BoundingSphere(void)
{ }

/**************************************************************************************************
* Assignment operator
**************************************************************************************************/
BoundingSphere& BoundingSphere::operator=(const BoundingSphere& rhs) {
	// Self-assignment guard
	if(this == &rhs)
		return *this;

	// Assign values
	_position = rhs.position();
	_radius = rhs.radius();
	return *this;
}

/**************************************************************************************************
* Equivalence operator
**************************************************************************************************/
bool BoundingSphere::operator==(const BoundingSphere& rhs) {
	return _position == rhs.position() && _radius == rhs.radius();
}

/**************************************************************************************************
* Non-equivalence operator
**************************************************************************************************/
bool BoundingSphere::operator!=(const BoundingSphere& rhs) {
	return _position != rhs.position() || _radius != rhs.radius();
}

/**************************************************************************************************
* Return position
**************************************************************************************************/
Vector3_16f& BoundingSphere::position(void) {
	return _position;
}

/**************************************************************************************************
* Return position
**************************************************************************************************/
const Vector3_16f& BoundingSphere::position(void) const {
	return _position;
}

/**************************************************************************************************
* Return radius
**************************************************************************************************/
float BoundingSphere::radius(void) {
	return _radius;
}

/**************************************************************************************************
* Return radius
**************************************************************************************************/
float BoundingSphere::radius(void) const {
	return _radius;
}